package com.pactera.madp.cp.mapper.sync;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pactera.madp.cp.api.entity.sync.MaYesterdayDataBoardEntity;
import com.pactera.madp.cp.api.entity.sync.MaTodayDataBoardEntity;
import com.pactera.madp.cp.api.entity.sync.SyncEventEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 数据采集表-MP接口定义
 *
 * @author Deming.Chang
 * @date 2022-05-11
 */
public interface SyncEventMapper extends BaseMapper<SyncEventEntity> {

    /**
     * 根据指定日期汇总访客和浏览次数(汇总到当前表)
     *
     * 说明：2022-05-20 和历史表分离(因批量时间不一致，导致数污染)
     *
     * @param date 指定日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaTodayDataBoardEntity> countByDate(@Param("date") String date);

    /**
     * 昨日视角汇总近三日访客和浏览次数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDate(@Param("beginDate") String beginDate,
                                                      @Param("endDate") String endDate);

    /**
     * 昨日视角汇近七日汇总访客和浏览次数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDate(@Param("beginDate") String beginDate,
                                                      @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近三日理财产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDateFinancial(@Param("beginDate") String beginDate,
                                                               @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近七日理财产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDateFinancial(@Param("beginDate") String beginDate,
                                                               @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近三日基金产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDateFund(@Param("beginDate") String beginDate,
                                                          @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近七日基金产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDateFund(@Param("beginDate") String beginDate,
                                                          @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近三日存款产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDateDeposit(@Param("beginDate") String beginDate,
                                                             @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近七日存款产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDateDeposit(@Param("beginDate") String beginDate,
                                                             @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近三日贷款产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDateLoan(@Param("beginDate") String beginDate,
                                                          @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近七日贷款产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDateLoan(@Param("beginDate") String beginDate,
                                                          @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近三日信用卡产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countByThreeDateCredit(@Param("beginDate") String beginDate,
                                                            @Param("endDate") String endDate);

    /**
     * 昨日视角汇总近七日信用卡产品访客数和浏览数
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 客户经理指定日期访客和浏览次数
     */
    List<MaYesterdayDataBoardEntity> countBySevenDateCredit(@Param("beginDate") String beginDate,
                                                            @Param("endDate") String endDate);

    /**
     * 日间批量同步前获取最大同步入库时间
     * @return 日间批量同步前获取最大同步入库时间
     */
    Long selectOneLastMaxReceiveTime();

}
